package controllers.mobile;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.aton.config.AppMode;
import com.aton.config.BizConstants;
import com.aton.config.CacheType;
import com.aton.config.AppMode.Mode;
import com.aton.util.CacheUtil;
import com.aton.util.QnCloudUtil;
import com.aton.util.QnCloudUtil.QnFileBucket;
import com.google.common.base.Strings;
import com.qiniu.common.Zone;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;

import mobile.util.QiniuUploadTool;
import mobile.vo.Result;
import models.User;
import play.Play;
import play.data.validation.Required;
import play.mvc.Controller;

public class BaseController extends Controller {

	private static final Logger logger = LoggerFactory.getLogger(BaseController.class);
	
	/**
	 * 处理输入错误
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2016年12月5日
	 * @param withErrMsg
	 */
	protected static void handleWrongInput(boolean withErrMsg) {
		if (!validation.hasErrors()) {
			return;
		}
		for (play.data.validation.Error error : validation.errors()) {
			try {
				logger.error("Input wrong: {}", error.message());
			} catch (Exception e) {
				logger.warn("Input wrong, and Exception={} when log", e.getMessage());
			}

			if (withErrMsg) {
				renderJSON(Result.invalidParamWithMsg(error.message()));
			}
			renderJSON(Result.invalidParam());
		}
    }
	
	/**
	 * 查询当前登录的用户
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2016年12月6日
	 * @param imei
	 * 			用户设置编号
	 * @return
	 */
	protected static User getCurrentUser(){
		String imei = params.get("imei");
		Long id = CacheUtil.get(imei);
		User user = User.findByIdWichCache(id);
		return user;
	}
	
	/**
	 * 如果没有找到相应的资源提示404
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2016年12月10日
	 * @param obj
	 */
	protected static void notFoundIfNull(Object obj){
		if(obj==null){
			renderJSON(Result.resourceNotFoundWithMsg("需要资源未找到"));
		}
	}
	
	/**
	 * 查询上传参数
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2016年12月26日
	 */
	public static void getUploadParams(boolean force){
		Map<String, String> data = new HashMap<String, String>();
		if (AppMode.get().mode == Mode.TEST) {
			data.put("bucket", QnFileBucket.TEST.code);
		} else if (AppMode.get().mode == Mode.ONLINE) {
			data.put("bucket", QnFileBucket.ONLINE_PUBLIC.code);
		} else {
			data.put("bucket", QnFileBucket.DEV.code);
		}
		if (force) {
            data.put("token",QnCloudUtil.generateUploadToken());
        }else{
	        String key = CacheType.FILE_UPTOKEN.getKey();
	        String uptoken = CacheUtil.get(key);
	        if (Strings.isNullOrEmpty(uptoken)) {
	            uptoken = QnCloudUtil.generateUploadToken();
	            CacheUtil.set(key, uptoken, CacheType.FILE_UPTOKEN.expiredTime);
	        }
	        data.put("token",uptoken);
        }
        renderJSON(Result.optSuccessWithData(data));
	}
	
	/**
	 * 上传文件到七牛
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2017年2月7日
	 * @param file
	 */
	public static void uploadFile(File file){
		if(file.length()>1024*1024){
			renderJSON(Result.errorWithMsg("请不要上传超过1M的图片"));
		}
		try {
			String url = QiniuUploadTool.upload(file);
			renderJSON(Result.optSuccessWithData("http://7xj5si.com1.z0.glb.clouddn.com/" + url));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			renderJSON(Result.error());
		}
		
	}
}
